pr: none

schedules:
  - cron: "0 5 * * Mon-Fri"
    displayName: Mon-Fri at 7:00
    branches:
      include:
        - main

trigger:
  branches:
    include: ["main", "release/*"]

parameters:
  - name: VSCODE_QUALITY
    displayName: Quality
    type: string
    default: insider
    values:
      - exploration
      - insider
      - stable
  - name: NPM_REGISTRY
    displayName: "Custom NPM Registry"
    type: string
    default: 'https://pkgs.dev.azure.com/monacotools/Monaco/_packaging/vscode/npm/registry/'
  - name: CARGO_REGISTRY
    displayName: "Custom Cargo Registry"
    type: string
    default: 'sparse+https://pkgs.dev.azure.com/monacotools/Monaco/_packaging/vscode/Cargo/index/'
  - name: VSCODE_BUILD_WIN32
    displayName: "🎯 Windows x64"
    type: boolean
    default: true
  - name: VSCODE_BUILD_WIN32_ARM64
    displayName: "🎯 Windows arm64"
    type: boolean
    default: true
  - name: VSCODE_BUILD_LINUX
    displayName: "🎯 Linux x64"
    type: boolean
    default: true
  - name: VSCODE_BUILD_LINUX_X64_LEGACY_SERVER
    displayName: "🎯 Linux x64 Legacy Server"
    type: boolean
    default: true
  - name: VSCODE_BUILD_LINUX_ARM64
    displayName: "🎯 Linux arm64"
    type: boolean
    default: true
  - name: VSCODE_BUILD_LINUX_ARM64_LEGACY_SERVER
    displayName: "🎯 Linux arm64 Legacy Server"
    type: boolean
    default: true
  - name: VSCODE_BUILD_LINUX_ARMHF
    displayName: "🎯 Linux armhf"
    type: boolean
    default: true
  - name: VSCODE_BUILD_LINUX_ARMHF_LEGACY_SERVER
    displayName: "🎯 Linux armhf Legacy Server"
    type: boolean
    default: true
  - name: VSCODE_BUILD_ALPINE
    displayName: "🎯 Alpine x64"
    type: boolean
    default: true
  - name: VSCODE_BUILD_ALPINE_ARM64
    displayName: "🎯 Alpine arm64"
    type: boolean
    default: true
  - name: VSCODE_BUILD_MACOS
    displayName: "🎯 macOS x64"
    type: boolean
    default: true
  - name: VSCODE_BUILD_MACOS_ARM64
    displayName: "🎯 macOS arm64"
    type: boolean
    default: true
  - name: VSCODE_BUILD_MACOS_UNIVERSAL
    displayName: "🎯 macOS universal"
    type: boolean
    default: true
  - name: VSCODE_BUILD_WEB
    displayName: "🎯 Web"
    type: boolean
    default: true
  - name: VSCODE_PUBLISH
    displayName: "Publish to builds.code.visualstudio.com"
    type: boolean
    default: true
  - name: VSCODE_RELEASE
    displayName: "Release build if successful"
    type: boolean
    default: false
  - name: VSCODE_COMPILE_ONLY
    displayName: "Run Compile stage exclusively"
    type: boolean
    default: false
  - name: VSCODE_STEP_ON_IT
    displayName: "Skip tests"
    type: boolean
    default: false

variables:
  - name: VSCODE_PRIVATE_BUILD
    value: ${{ ne(variables['Build.Repository.Uri'], 'https://github.com/microsoft/vscode.git') }}
  - name: NPM_REGISTRY
    value: ${{ parameters.NPM_REGISTRY }}
  - name: CARGO_REGISTRY
    value: ${{ parameters.CARGO_REGISTRY }}
  - name: VSCODE_QUALITY
    value: ${{ parameters.VSCODE_QUALITY }}
  - name: VSCODE_BUILD_STAGE_WINDOWS
    value: ${{ or(eq(parameters.VSCODE_BUILD_WIN32, true), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}
  - name: VSCODE_BUILD_STAGE_LINUX
    value: ${{ or(eq(parameters.VSCODE_BUILD_LINUX, true), eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true)) }}
  - name: VSCODE_BUILD_STAGE_LINUX_LEGACY_SERVER
    value: ${{ or(eq(parameters.VSCODE_BUILD_LINUX_X64_LEGACY_SERVER, true), eq(parameters.VSCODE_BUILD_LINUX_ARMHF_LEGACY_SERVER, true), eq(parameters.VSCODE_BUILD_LINUX_ARM64_LEGACY_SERVER, true)) }}
  - name: VSCODE_BUILD_STAGE_ALPINE
    value: ${{ or(eq(parameters.VSCODE_BUILD_ALPINE, true), eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true)) }}
  - name: VSCODE_BUILD_STAGE_MACOS
    value: ${{ or(eq(parameters.VSCODE_BUILD_MACOS, true), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true)) }}
  - name: VSCODE_BUILD_STAGE_WEB
    value: ${{ eq(parameters.VSCODE_BUILD_WEB, true) }}
  - name: VSCODE_CIBUILD
    value: ${{ in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI') }}
  - name: VSCODE_PUBLISH
    value: ${{ and(eq(parameters.VSCODE_PUBLISH, true), eq(variables.VSCODE_CIBUILD, false), eq(parameters.VSCODE_COMPILE_ONLY, false)) }}
  - name: VSCODE_SCHEDULEDBUILD
    value: ${{ eq(variables['Build.Reason'], 'Schedule') }}
  - name: VSCODE_7PM_BUILD
    value: ${{ in(variables['Build.Reason'], 'BuildCompletion', 'ResourceTrigger') }}
  - name: VSCODE_STEP_ON_IT
    value: ${{ eq(parameters.VSCODE_STEP_ON_IT, true) }}
  - name: VSCODE_BUILD_MACOS_UNIVERSAL
    value: ${{ and(eq(parameters.VSCODE_BUILD_MACOS, true), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true), eq(parameters.VSCODE_BUILD_MACOS_UNIVERSAL, true)) }}
  - name: PRSS_CDN_URL
    value: https://vscode.download.prss.microsoft.com/dbazure/download
  - name: PRSS_RELEASE_TENANT_ID
    value: 975f013f-7f24-47e8-a7d3-abc4752bf346
  - name: PRSS_RELEASE_CLIENT_ID
    value: c24324f7-e65f-4c45-8702-ed2d4c35df99
  - name: PRSS_PROVISION_TENANT_ID
    value: 72f988bf-86f1-41af-91ab-2d7cd011db47
  - name: AZURE_DOCUMENTDB_ENDPOINT
    value: https://vscode.documents.azure.com:443/
  - name: VSCODE_MIXIN_REPO
    value: microsoft/vscode-distro
  - name: skipComponentGovernanceDetection
    value: true
  - name: Codeql.SkipTaskAutoInjection
    value: true
  - name: ARTIFACT_PREFIX
    value: ''

name: "$(Date:yyyyMMdd).$(Rev:r) (${{ parameters.VSCODE_QUALITY }})"

resources:
  pipelines:
    - pipeline: vscode-7pm-kick-off
      source: 'VS Code 7PM Kick-Off'
      trigger: true
  repositories:
    - repository: 1ESPipelines
      type: git
      name: 1ESPipelineTemplates/1ESPipelineTemplates
      ref: refs/tags/release

extends:
  template: v1/1ES.Unofficial.PipelineTemplate.yml@1esPipelines
  parameters:
    sdl:
      tsa:
        enabled: true
        config:
          codebaseName: 'devdiv_$(Build.Repository.Name)'
          serviceTreeID: '79c048b2-322f-4ed5-a1ea-252a1250e4b3'
          instanceUrl: 'https://devdiv.visualstudio.com/defaultcollection'
          projectName: 'DevDiv'
          areaPath: "DevDiv\\VS Code (compliance tracking only)\\Visual Studio Code Client"
          notificationAliases: ['monacotools@microsoft.com']
          validateToolOutput: None
          allTools: true
      codeql:
        compiled:
          enabled: false
        runSourceLanguagesInSourceAnalysis: true
      credscan:
        suppressionsFile: $(Build.SourcesDirectory)/build/azure-pipelines/config/CredScanSuppressions.json
      eslint:
        enabled: true
        enableExclusions: true
        exclusionsFilePath: $(Build.SourcesDirectory)/.eslintignore
      sourceAnalysisPool: 1es-windows-2022-x64
    containers:
      snapcraft:
        image: vscodehub.azurecr.io/vscode-linux-build-agent:snapcraft-x64
      ubuntu-2004-arm64:
        image: onebranch.azurecr.io/linux/ubuntu-2004-arm64:latest
    authenticatedContainerRegistries:
      - registry: onebranch.azurecr.io
        tenant: AME
        identity: 1ESPipelineIdentity
    stages:
      - stage: Compile
        jobs:
          - job: Compile
            timeoutInMinutes: 90
            pool:
              name: 1es-ubuntu-20.04-x64
              os: linux
            variables:
              VSCODE_ARCH: x64
            steps:
              - template: build/azure-pipelines/product-compile.yml@self
                parameters:
                  VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}

      - ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
        - stage: CompileCLI
          dependsOn: []
          jobs:
            - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}:
              - job: CLILinuxX64
                pool:
                  name: 1es-ubuntu-20.04-x64
                  os: linux
                steps:
                  - template: build/azure-pipelines/linux/cli-build-linux.yml@self
                    parameters:
                      VSCODE_CHECK_ONLY: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_BUILD_LINUX: ${{ parameters.VSCODE_BUILD_LINUX }}

            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), or(eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true))) }}:
              - job: CLILinuxGnuARM
                pool:
                  name: 1es-ubuntu-20.04-x64
                  os: linux
                steps:
                  - template: build/azure-pipelines/linux/cli-build-linux.yml@self
                    parameters:
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_BUILD_LINUX_ARMHF: ${{ parameters.VSCODE_BUILD_LINUX_ARMHF }}
                      VSCODE_BUILD_LINUX_ARM64: ${{ parameters.VSCODE_BUILD_LINUX_ARM64 }}

            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_ALPINE, true)) }}:
              - job: CLIAlpineX64
                pool:
                  name: 1es-ubuntu-20.04-x64
                  os: linux
                steps:
                  - template: build/azure-pipelines/alpine/cli-build-alpine.yml@self
                    parameters:
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_BUILD_ALPINE: ${{ parameters.VSCODE_BUILD_ALPINE }}

            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true)) }}:
              - job: CLIAlpineARM64
                pool:
                  name: 1es-mariner-2.0-arm64
                  os: linux
                  hostArchitecture: arm64
                container: ubuntu-2004-arm64
                steps:
                  - template: build/azure-pipelines/alpine/cli-build-alpine.yml@self
                    parameters:
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_BUILD_ALPINE_ARM64: ${{ parameters.VSCODE_BUILD_ALPINE_ARM64 }}

            - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}:
              - job: CLIMacOSX64
                pool:
                  name: Azure Pipelines
                  image: macOS-13
                  os: macOS
                steps:
                  - template: build/azure-pipelines/darwin/cli-build-darwin.yml@self
                    parameters:
                      VSCODE_CHECK_ONLY: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_BUILD_MACOS: ${{ parameters.VSCODE_BUILD_MACOS }}

            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true)) }}:
              - job: CLIMacOSARM64
                pool:
                  name: Azure Pipelines
                  image: macOS-13
                  os: macOS
                steps:
                  - template: build/azure-pipelines/darwin/cli-build-darwin.yml@self
                    parameters:
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_BUILD_MACOS_ARM64: ${{ parameters.VSCODE_BUILD_MACOS_ARM64 }}

            - ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}:
              - job: CLIWindowsX64
                pool:
                  name: 1es-windows-2019-x64
                  os: windows
                steps:
                  - template: build/azure-pipelines/win32/cli-build-win32.yml@self
                    parameters:
                      VSCODE_CHECK_ONLY: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_BUILD_WIN32: ${{ parameters.VSCODE_BUILD_WIN32 }}

            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
              - job: CLIWindowsARM64
                pool:
                  name: 1es-windows-2019-x64
                  os: windows
                steps:
                  - template: build/azure-pipelines/win32/cli-build-win32.yml@self
                    parameters:
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_BUILD_WIN32_ARM64: ${{ parameters.VSCODE_BUILD_WIN32_ARM64 }}

      - stage: CustomSDL
        dependsOn: []
        pool:
          name: 1es-windows-2019-x64
          os: windows
        jobs:
          - job: WindowsSDL
            variables:
              - group: 'API Scan'
            steps:
              - template: build/azure-pipelines/sdl-scan.yml@self

      - ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_WINDOWS'], true)) }}:
        - stage: Windows
          dependsOn:
            - Compile
            - ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
              - CompileCLI
          pool:
            name: 1es-windows-2019-x64
            os: windows
          jobs:
            - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
              - job: WindowsUnitTests
                displayName: Unit Tests
                timeoutInMinutes: 60
                variables:
                  VSCODE_ARCH: x64
                steps:
                  - template: build/azure-pipelines/win32/product-build-win32.yml@self
                    parameters:
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_ARCH: x64
                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_RUN_UNIT_TESTS: true
                      VSCODE_RUN_INTEGRATION_TESTS: false
                      VSCODE_RUN_SMOKE_TESTS: false
              - job: WindowsIntegrationTests
                displayName: Integration Tests
                timeoutInMinutes: 60
                variables:
                  VSCODE_ARCH: x64
                steps:
                  - template: build/azure-pipelines/win32/product-build-win32.yml@self
                    parameters:
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_ARCH: x64
                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_RUN_UNIT_TESTS: false
                      VSCODE_RUN_INTEGRATION_TESTS: true
                      VSCODE_RUN_SMOKE_TESTS: false
              - job: WindowsSmokeTests
                displayName: Smoke Tests
                timeoutInMinutes: 60
                variables:
                  VSCODE_ARCH: x64
                steps:
                  - template: build/azure-pipelines/win32/product-build-win32.yml@self
                    parameters:
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_ARCH: x64
                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_RUN_UNIT_TESTS: false
                      VSCODE_RUN_INTEGRATION_TESTS: false
                      VSCODE_RUN_SMOKE_TESTS: true

            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32, true)) }}:
              - job: Windows
                timeoutInMinutes: 120
                variables:
                  VSCODE_ARCH: x64
                steps:
                  - template: build/azure-pipelines/win32/product-build-win32.yml@self
                    parameters:
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_ARCH: x64
                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
                      VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
                      VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}

              - job: WindowsCLISign
                timeoutInMinutes: 90
                steps:
                  - template: build/azure-pipelines/win32/product-build-win32-cli-sign.yml@self
                    parameters:
                      VSCODE_BUILD_WIN32: ${{ parameters.VSCODE_BUILD_WIN32 }}
                      VSCODE_BUILD_WIN32_ARM64: ${{ parameters.VSCODE_BUILD_WIN32_ARM64 }}

            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
              - job: WindowsARM64
                timeoutInMinutes: 90
                variables:
                  VSCODE_ARCH: arm64
                steps:
                  - template: build/azure-pipelines/win32/product-build-win32.yml@self
                    parameters:
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_ARCH: arm64
                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_RUN_UNIT_TESTS: false
                      VSCODE_RUN_INTEGRATION_TESTS: false
                      VSCODE_RUN_SMOKE_TESTS: false

      - ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_LINUX'], true)) }}:
        - stage: Linux
          dependsOn:
            - Compile
            - ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
              - CompileCLI
          pool:
            name: 1es-ubuntu-20.04-x64
            os: linux
          jobs:
            - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
              - job: Linuxx64UnitTest
                displayName: Unit Tests
                variables:
                  VSCODE_ARCH: x64
                  NPM_ARCH: x64
                  DISPLAY: ":10"
                steps:
                  - template: build/azure-pipelines/linux/product-build-linux.yml@self
                    parameters:
                      VSCODE_ARCH: x64
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_RUN_UNIT_TESTS: true
                      VSCODE_RUN_INTEGRATION_TESTS: false
                      VSCODE_RUN_SMOKE_TESTS: false
              - job: Linuxx64IntegrationTest
                displayName: Integration Tests
                variables:
                  VSCODE_ARCH: x64
                  NPM_ARCH: x64
                  DISPLAY: ":10"
                steps:
                  - template: build/azure-pipelines/linux/product-build-linux.yml@self
                    parameters:
                      VSCODE_ARCH: x64
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_RUN_UNIT_TESTS: false
                      VSCODE_RUN_INTEGRATION_TESTS: true
                      VSCODE_RUN_SMOKE_TESTS: false
              - job: Linuxx64SmokeTest
                displayName: Smoke Tests
                variables:
                  VSCODE_ARCH: x64
                  NPM_ARCH: x64
                  DISPLAY: ":10"
                steps:
                  - template: build/azure-pipelines/linux/product-build-linux.yml@self
                    parameters:
                      VSCODE_ARCH: x64
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_RUN_UNIT_TESTS: false
                      VSCODE_RUN_INTEGRATION_TESTS: false
                      VSCODE_RUN_SMOKE_TESTS: true

            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX, true)) }}:
              - job: Linuxx64
                timeoutInMinutes: 90
                variables:
                  VSCODE_ARCH: x64
                  NPM_ARCH: x64
                  DISPLAY: ":10"
                steps:
                  - template: build/azure-pipelines/linux/product-build-linux.yml@self
                    parameters:
                      VSCODE_ARCH: x64
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
                      VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
                      VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}

            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX, true)) }}:
              - job: LinuxSnap
                dependsOn:
                  - Linuxx64
                container: snapcraft
                variables:
                  VSCODE_ARCH: x64
                steps:
                  - template: build/azure-pipelines/linux/snap-build-linux.yml@self

            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true)) }}:
              - job: LinuxArmhf
                variables:
                  VSCODE_ARCH: armhf
                  NPM_ARCH: arm
                steps:
                  - template: build/azure-pipelines/linux/product-build-linux.yml@self
                    parameters:
                      VSCODE_ARCH: armhf
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_RUN_UNIT_TESTS: false
                      VSCODE_RUN_INTEGRATION_TESTS: false
                      VSCODE_RUN_SMOKE_TESTS: false

            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true)) }}:
              - job: LinuxArm64
                variables:
                  VSCODE_ARCH: arm64
                  NPM_ARCH: arm64
                steps:
                  - template: build/azure-pipelines/linux/product-build-linux.yml@self
                    parameters:
                      VSCODE_ARCH: arm64
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_RUN_UNIT_TESTS: false
                      VSCODE_RUN_INTEGRATION_TESTS: false
                      VSCODE_RUN_SMOKE_TESTS: false

      - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_LINUX_LEGACY_SERVER'], true)) }}:
        - stage: LinuxLegacyServer
          dependsOn:
            - Compile
          pool:
            name: 1es-ubuntu-20.04-x64
            os: linux
          jobs:
            - ${{ if eq(parameters.VSCODE_BUILD_LINUX_X64_LEGACY_SERVER, true) }}:
              - job: Linuxx64LegacyServer
                variables:
                  VSCODE_ARCH: x64
                  NPM_ARCH: x64
                  DISPLAY: ":10"
                steps:
                  - template: build/azure-pipelines/linux/product-build-linux-legacy-server.yml@self
                    parameters:
                      VSCODE_ARCH: x64
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}

            - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARMHF_LEGACY_SERVER, true) }}:
              - job: LinuxArmhfLegacyServer
                variables:
                  VSCODE_ARCH: armhf
                  NPM_ARCH: arm
                steps:
                  - template: build/azure-pipelines/linux/product-build-linux-legacy-server.yml@self
                    parameters:
                      VSCODE_ARCH: armhf
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_RUN_INTEGRATION_TESTS: false

            - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64_LEGACY_SERVER, true) }}:
              - job: LinuxArm64LegacyServer
                variables:
                  VSCODE_ARCH: arm64
                  NPM_ARCH: arm64
                steps:
                  - template: build/azure-pipelines/linux/product-build-linux-legacy-server.yml@self
                    parameters:
                      VSCODE_ARCH: arm64
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_RUN_INTEGRATION_TESTS: false

      - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_ALPINE'], true)) }}:
        - stage: Alpine
          dependsOn:
            - Compile
            - ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
              - CompileCLI
          pool:
            name: 1es-ubuntu-20.04-x64
            os: linux
          jobs:
            - ${{ if eq(parameters.VSCODE_BUILD_ALPINE, true) }}:
              - job: LinuxAlpine
                variables:
                  VSCODE_ARCH: x64
                  NPM_ARCH: x64
                steps:
                  - template: build/azure-pipelines/alpine/product-build-alpine.yml@self

            - ${{ if eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true) }}:
              - job: LinuxAlpineArm64
                timeoutInMinutes: 120
                variables:
                  VSCODE_ARCH: arm64
                  NPM_ARCH: arm64
                steps:
                  - template: build/azure-pipelines/alpine/product-build-alpine.yml@self

      - ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_MACOS'], true)) }}:
        - stage: macOS
          dependsOn:
            - Compile
            - ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
              - CompileCLI
          pool:
            name: Azure Pipelines
            image: macOS-13
            os: macOS
          variables:
            BUILDSECMON_OPT_IN: true
          jobs:
            - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
              - job: macOSUnitTest
                displayName: Unit Tests
                timeoutInMinutes: 90
                variables:
                  VSCODE_ARCH: x64
                steps:
                  - template: build/azure-pipelines/darwin/product-build-darwin.yml@self
                    parameters:
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_RUN_UNIT_TESTS: true
                      VSCODE_RUN_INTEGRATION_TESTS: false
                      VSCODE_RUN_SMOKE_TESTS: false
              - job: macOSIntegrationTest
                displayName: Integration Tests
                timeoutInMinutes: 90
                variables:
                  VSCODE_ARCH: x64
                steps:
                  - template: build/azure-pipelines/darwin/product-build-darwin.yml@self
                    parameters:
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_RUN_UNIT_TESTS: false
                      VSCODE_RUN_INTEGRATION_TESTS: true
                      VSCODE_RUN_SMOKE_TESTS: false
              - job: macOSSmokeTest
                displayName: Smoke Tests
                timeoutInMinutes: 90
                variables:
                  VSCODE_ARCH: x64
                steps:
                  - template: build/azure-pipelines/darwin/product-build-darwin.yml@self
                    parameters:
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_RUN_UNIT_TESTS: false
                      VSCODE_RUN_INTEGRATION_TESTS: false
                      VSCODE_RUN_SMOKE_TESTS: true

            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_MACOS, true)) }}:
              - job: macOS
                timeoutInMinutes: 90
                variables:
                  VSCODE_ARCH: x64
                steps:
                  - template: build/azure-pipelines/darwin/product-build-darwin.yml@self
                    parameters:
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_RUN_UNIT_TESTS: false
                      VSCODE_RUN_INTEGRATION_TESTS: false
                      VSCODE_RUN_SMOKE_TESTS: false

              - ${{ if eq(parameters.VSCODE_STEP_ON_IT, false) }}:
                - job: macOSTest
                  timeoutInMinutes: 90
                  variables:
                    VSCODE_ARCH: x64
                  steps:
                    - template: build/azure-pipelines/darwin/product-build-darwin.yml@self
                      parameters:
                        VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                        VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
                        VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
                        VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
                        VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}

              - job: macOSSign
                dependsOn:
                  - macOS
                timeoutInMinutes: 90
                variables:
                  VSCODE_ARCH: x64
                steps:
                  - template: build/azure-pipelines/darwin/product-build-darwin-sign.yml@self

              - job: macOSCLISign
                timeoutInMinutes: 90
                steps:
                  - template: build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml@self
                    parameters:
                      VSCODE_BUILD_MACOS: ${{ parameters.VSCODE_BUILD_MACOS }}
                      VSCODE_BUILD_MACOS_ARM64: ${{ parameters.VSCODE_BUILD_MACOS_ARM64 }}

            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true)) }}:
              - job: macOSARM64
                timeoutInMinutes: 90
                variables:
                  VSCODE_ARCH: arm64
                steps:
                  - template: build/azure-pipelines/darwin/product-build-darwin.yml@self
                    parameters:
                      VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
                      VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
                      VSCODE_RUN_UNIT_TESTS: false
                      VSCODE_RUN_INTEGRATION_TESTS: false
                      VSCODE_RUN_SMOKE_TESTS: false

              - job: macOSARM64Sign
                dependsOn:
                  - macOSARM64
                timeoutInMinutes: 90
                variables:
                  VSCODE_ARCH: arm64
                steps:
                  - template: build/azure-pipelines/darwin/product-build-darwin-sign.yml@self

            - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(variables['VSCODE_BUILD_MACOS_UNIVERSAL'], true)) }}:
              - job: macOSUniversal
                dependsOn:
                  - macOS
                  - macOSARM64
                timeoutInMinutes: 90
                variables:
                  VSCODE_ARCH: universal
                steps:
                  - template: build/azure-pipelines/darwin/product-build-darwin-universal.yml@self

              - job: macOSUniversalSign
                dependsOn:
                  - macOSUniversal
                timeoutInMinutes: 90
                variables:
                  VSCODE_ARCH: universal
                steps:
                  - template: build/azure-pipelines/darwin/product-build-darwin-sign.yml@self

      - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_WEB'], true)) }}:
        - stage: Web
          dependsOn:
            - Compile
          pool:
            name: 1es-ubuntu-20.04-x64
            os: linux
          jobs:
            - ${{ if eq(parameters.VSCODE_BUILD_WEB, true) }}:
              - job: Web
                variables:
                  VSCODE_ARCH: x64
                steps:
                  - template: build/azure-pipelines/web/product-build-web.yml@self

      - ${{ if eq(variables['VSCODE_PUBLISH'], 'true') }}:
        - stage: Publish
          dependsOn: []
          pool:
            name: 1es-windows-2019-x64
            os: windows
          variables:
            - name: BUILDS_API_URL
              value: $(System.CollectionUri)$(System.TeamProject)/_apis/build/builds/$(Build.BuildId)/
          jobs:
            - job: PublishBuild
              timeoutInMinutes: 180
              displayName: Publish Build
              steps:
                - template: build/azure-pipelines/product-publish.yml@self

        - ${{ if and(parameters.VSCODE_RELEASE, eq(variables['VSCODE_PRIVATE_BUILD'], false)) }}:
          - stage: ApproveRelease
            dependsOn: [] # run in parallel to compile stage
            pool:
              name: 1es-ubuntu-20.04-x64
              os: linux
            jobs:
              - deployment: ApproveRelease
                displayName: "Approve Release"
                environment: "vscode"
                variables:
                  skipComponentGovernanceDetection: true
                strategy:
                  runOnce:
                    deploy:
                      steps:
                        - checkout: none

        - ${{ if or(and(parameters.VSCODE_RELEASE, eq(variables['VSCODE_PRIVATE_BUILD'], false)), and(in(parameters.VSCODE_QUALITY, 'insider', 'exploration'), eq(variables['VSCODE_SCHEDULEDBUILD'], true))) }}:
          - stage: Release
            dependsOn:
              - Publish
              - ${{ if and(parameters.VSCODE_RELEASE, eq(variables['VSCODE_PRIVATE_BUILD'], false)) }}:
                - ApproveRelease
            pool:
              name: 1es-ubuntu-20.04-x64
              os: linux
            jobs:
              - job: ReleaseBuild
                displayName: Release Build
                steps:
                  - template: build/azure-pipelines/product-release.yml@self
                    parameters:
                      VSCODE_RELEASE: ${{ parameters.VSCODE_RELEASE }}
